Reverse a rangeΒΆ
Reverse a range.
Expected output:
range(1, 10, 2) -> range(9, -1, -2)
range(1, 5, 1) -> range(4, 0, -1)
def reversed_range(start, stop=None, step=1):
if stop is None:
return range(start - step, -step, -step)
else:
new_start = stop - ((stop-start-1) % step + 1)
new_end = new_start - (stop-start+step-1) // step * step
if (stop - start) % step == 0 and step < 0:
new_start -= step
return range(new_start, new_end, -step)
# test
print(reversed_range(1, 10, 2)) # range(9, -1, -2)
print(reversed_range(1, 5, 1)) # range(4, 0, -1)